import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSSysTestCaseAssert } from './ipssys-test-case-assert';
import { IPSSysTestCaseInput } from './ipssys-test-case-input';
import { IPSSysTestData } from './ipssys-test-data';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[testCaseType]
 * @export
 * @interface IPSSysTestCase
 */
export interface IPSSysTestCase extends IPSModelObject {
  /**
   * 断言异常数据
   * @type {string}
   */
  assertExceptionData: string;

  /**
   * 断言异常数据2
   * @type {string}
   */
  assertExceptionData2: string;

  /**
   * 断言异常名称
   * @type {string}
   */
  assertExceptionName: string;

  /**
   * 测试断言类型
   * @description 值模式 [测试断言类型] {RESULT：预期结果、 EXCEPTION：预期异常、 DATAEXISTS：预期数据存在、 NOEXCEPTION：预期无异常、 CUSTOMCODE：自定义代码、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'RESULT' | 'EXCEPTION' | 'DATAEXISTS' | 'NOEXCEPTION' | 'CUSTOMCODE' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  assertType: string | 'RESULT' | 'EXCEPTION' | 'DATAEXISTS' | 'NOEXCEPTION' | 'CUSTOMCODE' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 排序值
   * @type {number}
   * @default 99999
   */
  orderValue: number;

  /**
   * 测试实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 测试实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 测试实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 测试用例断言集合
   *
   * @type {IPSSysTestCaseAssert[]}
   */
  getPSSysTestCaseAsserts(): IPSSysTestCaseAssert[] | null;

  /**
   * 测试用例断言集合
   *
   * @type {IPSSysTestCaseAssert[]}
   */
  get psSysTestCaseAsserts(): IPSSysTestCaseAssert[] | null;

  findPSSysTestCaseAssert(objKey: any): IPSSysTestCaseAssert | null;

  /**
   * 测试用例输入集合
   *
   * @type {IPSSysTestCaseInput[]}
   */
  getPSSysTestCaseInputs(): IPSSysTestCaseInput[] | null;

  /**
   * 测试用例输入集合
   *
   * @type {IPSSysTestCaseInput[]}
   */
  get psSysTestCaseInputs(): IPSSysTestCaseInput[] | null;

  findPSSysTestCaseInput(objKey: any): IPSSysTestCaseInput | null;

  /**
   * 测试数据
   *
   * @type {IPSSysTestData}
   */
  getPSSysTestData(): IPSSysTestData | null;

  /**
   * 测试数据
   *
   * @type {IPSSysTestData}
   */
  get psSysTestData(): IPSSysTestData | null;

  /**
   * 测试数据（必须存在）
   *
   * @type {IPSSysTestData}
   */
  getPSSysTestDataMust(): IPSSysTestData;

  /**
   * 测试用例编号
   * @type {string}
   */
  testCaseSN: string;

  /**
   * 用例类型
   * @description 值模式 [测试用例目标类型] {DEFVR：实体属性值规则、 DEACTION：实体行为、 DESADETAIL：实体接口方法、 APPVIEW：应用视图、 CUSTOM：自定义 }
   * @type {( string | 'DEFVR' | 'DEACTION' | 'DESADETAIL' | 'APPVIEW' | 'CUSTOM')}
   */
  testCaseType: string | 'DEFVR' | 'DEACTION' | 'DESADETAIL' | 'APPVIEW' | 'CUSTOM';

  /**
   * 事务回滚
   * @type {boolean}
   */
  rollbackTransaction: boolean;
}
